package com.example.myapplication;

import android.content.Context;
import android.graphics.Color;
import android.graphics.Typeface;

import androidx.core.content.ContextCompat;

import com.github.mikephil.charting.charts.CandleStickChart;
import com.github.mikephil.charting.components.Description;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.CandleDataSet;

/**
 * K线图样式配置器
 * 提供统一的图表样式配置
 */
public class KLineChartStyler {
    
    private Context context;
    
    public KLineChartStyler(Context context) {
        this.context = context;
    }
    
    /**
     * 应用专业K线图样式
     */
    public void applyProfessionalStyle(CandleStickChart chart) {
        // 基础设置
        chart.setDrawBorders(true);
        chart.setBorderColor(ContextCompat.getColor(context, R.color.kline_grid));
        chart.setBorderWidth(0.8f);
        chart.setMaxVisibleValueCount(50);
        chart.setPinchZoom(true);
        chart.setScaleXEnabled(true);
        chart.setScaleYEnabled(false);
        chart.setDrawGridBackground(false);
        chart.setBackgroundColor(ContextCompat.getColor(context, R.color.kline_background));
        
        // 设置触摸和拖拽
        chart.setTouchEnabled(true);
        chart.setDragEnabled(true);
        chart.setHighlightPerDragEnabled(true);
        
        // 描述设置
        Description description = new Description();
        description.setText("");
        chart.setDescription(description);
        
        // 配置坐标轴
        configureXAxis(chart.getXAxis());
        configureYAxis(chart.getAxisRight(), chart.getAxisLeft());
        
        // 配置图例
        configureLegend(chart.getLegend());
    }
    
    /**
     * 配置X轴样式
     */
    private void configureXAxis(XAxis xAxis) {
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        xAxis.setDrawGridLines(true);
        xAxis.setGridColor(ContextCompat.getColor(context, R.color.kline_grid));
        xAxis.setGridLineWidth(0.5f);
        xAxis.setTextColor(ContextCompat.getColor(context, R.color.kline_text));
        xAxis.setTextSize(9f);
        xAxis.setGranularity(1f);
        xAxis.setGranularityEnabled(true);
        xAxis.setAvoidFirstLastClipping(true);
        xAxis.setLabelCount(6, false);
        
        // 设置轴线样式
        xAxis.setAxisLineColor(ContextCompat.getColor(context, R.color.kline_axis));
        xAxis.setAxisLineWidth(1f);
        xAxis.setDrawAxisLine(true);
    }
    
    /**
     * 配置Y轴样式
     */
    private void configureYAxis(YAxis rightAxis, YAxis leftAxis) {
        // 右侧Y轴
        rightAxis.setDrawGridLines(true);
        rightAxis.setGridColor(ContextCompat.getColor(context, R.color.kline_grid));
        rightAxis.setGridLineWidth(0.5f);
        rightAxis.setTextColor(ContextCompat.getColor(context, R.color.kline_text));
        rightAxis.setTextSize(9f);
        rightAxis.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART);
        rightAxis.setLabelCount(8, false);
        
        // 设置轴线样式
        rightAxis.setAxisLineColor(ContextCompat.getColor(context, R.color.kline_axis));
        rightAxis.setAxisLineWidth(1f);
        rightAxis.setDrawAxisLine(true);
        
        // 左侧Y轴（禁用）
        leftAxis.setEnabled(false);
    }
    
    /**
     * 配置图例样式
     */
    private void configureLegend(Legend legend) {
        legend.setEnabled(false);
    }
    
    /**
     * 应用数据集样式
     */
    public void applyDataSetStyle(CandleDataSet dataSet) {
        // 阳线样式（上涨）
        dataSet.setIncreasingColor(ContextCompat.getColor(context, R.color.kline_rising));
        dataSet.setIncreasingPaintStyle(android.graphics.Paint.Style.FILL);
        
        // 阴线样式（下跌）
        dataSet.setDecreasingColor(ContextCompat.getColor(context, R.color.kline_falling));
        dataSet.setDecreasingPaintStyle(android.graphics.Paint.Style.FILL);
        
        // 影线样式
        dataSet.setShadowColor(ContextCompat.getColor(context, R.color.kline_axis));
        dataSet.setShadowWidth(0.8f);
        
        // 中性颜色（开盘价 = 收盘价）
        dataSet.setNeutralColor(ContextCompat.getColor(context, R.color.kline_axis));
        
        // 禁用数值显示
        dataSet.setDrawValues(false);
        
        // 高亮样式
        dataSet.setHighlightEnabled(true);
        dataSet.setHighLightColor(ContextCompat.getColor(context, R.color.primary_color));
        dataSet.setHighlightLineWidth(1f);
        
        // 设置数据集标签
        dataSet.setLabel("K线数据");
    }
    
    /**
     * 应用暗色主题样式
     */
    public void applyDarkTheme(CandleStickChart chart) {
        // 暗色背景
        chart.setBackgroundColor(Color.parseColor("#1E1E1E"));
        chart.setBorderColor(Color.parseColor("#404040"));
        
        // X轴暗色样式
        XAxis xAxis = chart.getXAxis();
        xAxis.setGridColor(Color.parseColor("#404040"));
        xAxis.setTextColor(Color.parseColor("#CCCCCC"));
        xAxis.setAxisLineColor(Color.parseColor("#606060"));
        
        // Y轴暗色样式
        YAxis rightAxis = chart.getAxisRight();
        rightAxis.setGridColor(Color.parseColor("#404040"));
        rightAxis.setTextColor(Color.parseColor("#CCCCCC"));
        rightAxis.setAxisLineColor(Color.parseColor("#606060"));
    }
    
    /**
     * 应用亮色主题样式
     */
    public void applyLightTheme(CandleStickChart chart) {
        // 亮色背景
        chart.setBackgroundColor(Color.parseColor("#FAFAFA"));
        chart.setBorderColor(Color.parseColor("#E0E0E0"));
        
        // X轴亮色样式
        XAxis xAxis = chart.getXAxis();
        xAxis.setGridColor(Color.parseColor("#E0E0E0"));
        xAxis.setTextColor(Color.parseColor("#616161"));
        xAxis.setAxisLineColor(Color.parseColor("#9E9E9E"));
        
        // Y轴亮色样式
        YAxis rightAxis = chart.getAxisRight();
        rightAxis.setGridColor(Color.parseColor("#E0E0E0"));
        rightAxis.setTextColor(Color.parseColor("#616161"));
        rightAxis.setAxisLineColor(Color.parseColor("#9E9E9E"));
    }
    
    /**
     * 设置动画效果
     */
    public void setAnimations(CandleStickChart chart) {
        chart.animateX(1000); // X轴动画，持续1秒
        chart.animateY(1000); // Y轴动画，持续1秒
    }
    
    /**
     * 获取专业的数据集样式配置
     */
    public CandleDataSet createStyledDataSet(java.util.List<com.github.mikephil.charting.data.CandleEntry> entries, String label) {
        CandleDataSet dataSet = new CandleDataSet(entries, label);
        applyDataSetStyle(dataSet);
        return dataSet;
    }
}